Predanie retazca do visual basicu

Otázka od: preas_w

3. 9. 2002 10:59

Ahoj,
neviem si rady. Mam dll kniznicu a z nej potrebujem ako navratovu hodnotu
vratit do programu napisnom vo visual basicu cestu k suboru - retazec.
Skusal som to s pouzitim sharemem a borlndmm.dll, potom som skusil nadefinovat
pole znakov, dat tam retazec a vratit to ako pchar, neslo tak som skusil
variant marne.
Okrem toho pchar mi to vzdy vyhladsi chybu ze preogram pise do pameti kde nema
a krachne cela aplikacia.
PChar mi neustale vracia prazdnu hodnotu.
Nestretol sa niekto s podobnym problemom?

Diky
miro

Odpovedá: Marek Čížek

3. 9. 2002 11:42


budto buffer alokujes v basicu pomoci funkci api,
do fce z dll predas ukazatel na tento buffer a do nej
nakopirujes retezec, nebo si z basicu posles handle
do aplikace a retezec posilas jako parametry
funkce SendMessage. Model volani je tusim
u obou jazyku stdcall, takze ho menit nemusis.

Marek


----- Original Message -----
Ahoj,
neviem si rady. Mam dll kniznicu a z nej potrebujem ako navratovu hodnotu
vratit do programu napisnom vo visual basicu cestu k suboru - retazec.
Skusal som to s pouzitim sharemem a borlndmm.dll, potom som skusil
nadefinovat pole znakov, dat tam retazec a vratit to ako pchar, neslo tak
som skusil variant marne.
Okrem toho pchar mi to vzdy vyhladsi chybu ze preogram pise do pameti kde
nema a krachne cela aplikacia.
PChar mi neustale vracia prazdnu hodnotu.
Nestretol sa niekto s podobnym problemom?

Diky
miro

Odpovedá: Pavel Gazda

3. 9. 2002 12:45

Ahoj,

podobny problem jsem resil ( ne do basicu).
Asi nejlepsi reseni je asi toto: ve volajici aplikaci nadefinovat buffer a
predat adresu na tento buffer a jeho velikost do dll, v dll pak naplnit tento
buffer.

Pavel



> neviem si rady. Mam dll kniznicu a z nej potrebujem ako navratovu hodnotu
vratit do programu napisnom vo > visual basicu cestu k suboru - retazec.

Odpovedá: miro mrazik

3. 9. 2002 18:02

Ahoj,
> funkce SendMessage. Model volani je tusim
> u obou jazyku stdcall, takze ho menit nemusis.
Ako odchytim tu message vo VB?. Mozes mi poslat priklad?
Diky miro

Odpovedá: miro mrazik

3. 9. 2002 22:48

Ahoj,
problem bol nakoniec v tom, ze vo VB sa musi retazec, ktory sa predava do
delphi najprv naplnit nejakou hodnotou aj prazdnou potom to ide bez
problemov.
Zrejme ho VB vytvori az vo chvili ked sa mu priradi hodnota.

miro

Odpovedá: Erik Salaj

5. 9. 2002 0:13

> neviem si rady. Mam dll kniznicu a z nej potrebujem ako navratovu hodnotu
> vratit do programu napisnom vo visual basicu cestu k suboru - retazec.

najjednoduchsim riesenim by mohlo byt pouzitie OleVariant premennej:

--------------------------------------------------------- DLL

library Test;

{$R *.RES}

function MyFunc: OleVariant; stdcall;
begin
  Result := 'Hello, world';
end;

exports
  MyFunc;

begin
end.

--------------------------------------------------------- VBasic

Private Declare Function MyFunc Lib "test" () As Variant

Private Sub Command1_Click()
  MsgBox MyFunc()
End Sub

---------------------------------------------------------

Erik